____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
ÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻ
Programmierstil
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
top
Ein Programmierstil (engl. code conventions, coding conventions, coding standards) ist in der Programmierung das Erstellen von Quellcode nach bestimmten vorgegebenen Regeln. Er gilt als Teilaspekt von Softwarequalität, der insbesondere die Verständlichkeit und Wartbarkeit von Software, dies sind Kriterien fßr Softwarequalität gem. ISO/IEC 9126 (aktualisiert durch ISO/IEC 25000) unterstßtzen soll.
Ein Programmierstil und die Vorgaben dazu regeln, âwieâ ein Programm, d. h. sein Quellcode, in formaler und struktureller Hinsicht gestaltet sein soll â unabhängig davon, âwasâ das Programm leisten soll. Dabei wirken drei Aspekte zusammen:
⢠Die Vorschrift: Die Definition von Regeln oder Konventionen/Standards. Im Sinn von (Software-) âQualitätâ (= âdas ErfĂźllen von Anforderungenâ) sind dies âAnforderungenâ.
⢠Die Handlung: Das Umsetzen/Berßcksichtigen dieser Regeln; 'Programmieren' / Erstellen von Programmcode
⢠Das Ergebnis: Der Quelltext mit seiner Struktur und seinem Erscheinungsbild; im Rahmen der Qualitätssicherung auf Einhaltung der Vorschrift(en) ßberprßfbar
In einem umfassenderen Sinn gelten auch die Programmierparadigmen als (fundamentaler) Programmierstil.cite-ref-1[1]
Die Beurteilung eines Programmierstils erfordert in der Regel ein tiefes semantisches Verständnis des Programmquelltextes. Aus diesem Grund sind Style Checker und Beautifier bisher nicht oder nur äuĂerst eingeschränkt in der Lage, die ĂberprĂźfung auf einen guten Programmierstil bezĂźglich dieser Elemente durchzufĂźhren bzw. eine Einhaltung gewährleisten zu kĂśnnen.
Contents
⢠Zweck
⢠Regelwerke
⢠Siehe auch
⢠Literatur
⢠Weblinks
⢠Einzelnachweise
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Zweck
Der Zweck eines definierten Programmierstils ist die Erleichterung der Arbeit aller an einem Programmierprojekt beteiligten Teammitglieder. Das bezieht sich insbesondere auf die Lesbarkeit, Verständlichkeit und Wartbarkeit von Programm-Quelltext bzw. der Eliminierung vermeidbarer Fehlerquellen in Programmen.
Im Sinne der Verständlichkeit und Wartbarkeit kann eine Richtlinie die Verwendung von programmsprachlich erlaubten (aber âunsauberenâ) Programmkonstrukten einschränken oder ganz verbieten. Die Einhaltung von vorgängig definierten Nomenklaturen fĂźr Variablen, Prozeduren und Klassennamen kann Lesbarkeit und Wartbarkeit eines Programmcodes wesentlich verbessern.
Während der Wartung ist die Einhaltung eines definierten Programmierstils noch wichtiger als während der Entwicklung. Als Richtwert gilt, dass 80 % der Lebenszeit eines Softwareprodukts auf die Wartung entfallen. Oft wird ein Programm nicht von der ursprßnglichen programmierenden Person gewartet. Umso wichtiger ist es, dass bereits vom ersten Augenblick an ein guter Programmierstil verwendet wird.
Ein Programmierstil sollte nicht unbedingt wie eine Doktrin ausgelegt werden. VerstĂśĂe dagegen sollten erlaubt sein, sofern sie gut begrĂźndet sind. Dies kann in Einzelfällen beispielsweise (beim Programmierstil im engeren Sinne) durch optimierte Platzausnutzung den Ăberblick verbessern, durch Betonung bestimmter Einzelheiten der Verständlichkeit dienen oder als Ad-hoc-Sonderregel fĂźr besondere Codeteile die Ziele des Programmierstils mit anderen Mitteln verfolgen.
Beispiele fĂźr Elemente des Programmierstils
Die Inhalte, die Gegenstand eines Programmierstils sind, kĂśnnen von Fall zu Fall unterschiedlich sein. Die Bandbreite reicht von einfachen Vorgaben zur Code-Strukturierung (EinrĂźckungen) bis hin zu Festlegungen fĂźr alle das âWieâ der Implementierung betreffenden Details.
In grĂśĂeren Projekten und Unternehmen, wo viele Beteiligte in der Softwareentwicklung zusammenarbeiten, werden die Anforderungen zum Programmierstil häufig in Programmierrichtlinien festgelegt. Oft bauen diese auf Ăźberbetrieblich oder international verĂśffentlichten Konventionen und Empfehlungen auf; Beispiele sind die âUngarische Notationâ oder die âJava-Code-Conventionsâ.cite-ref-javaoracle-2-0[2]
Ein Teil der Regeln ist auf die verwendete Programmiersprache ausgerichtet. Einzelne oder viele Elemente kĂśnnen situationsbedingt unterschiedlich wichtig sein (von âMussâ bis zu ânicht relevantâ); z. B. abhängig davon, ob die Software nur einmalig oder dauerhaft benutzt werden soll. Im privaten oder nicht-kommerziellen Bereich wenden Softwareentwickler häufig nur einen erlernten oder intuitiv angewendeten, nicht explizit festgelegten Programmierstil an.
Beispiele fĂźr Elemente des Programmierstils sind nachfolgend gelistet (u. a. auscite-ref-3[3]):
⢠Verwenden der ßblichen Vorgehensweisen im gewählten Programmierparadigma (z. B. Objektorientierte Programmierung)
⢠Festlegung von Namenskonventionen: Wie sind Bezeichner zu wählen?
⢠Anwendung von Entwurfsmustern
⢠Verwendung von Compilerdirektiven und -Schaltern
⢠Strukturierung des Codes (EinrĂźckungen, Modul-/ProzedurgrĂśĂe, GOTO-Verbot): Wo sollen Leerzeichen stehen? Wie ist einzurĂźcken? Maximale Zeilenanzahl einer Routine.
⢠Typisierung (Wahl des Typs fßr ein Symbol oder eine Variable)
⢠Initialisieren von Variablen
⢠Zugriff auf Variable fremder Objekte / Prozeduren
⢠Gestaltung von Funktionsaufrufen (Parameterßbergaben, Rßckgabewerte)
⢠pflichtgemäà zu verwendende Standardkomponenten, wie Unterprogramme, APIs etc.
⢠Vermeidung von Redundanz und mĂśglichst breite Wiederverwendbarkeit â durch Modularisierung
⢠Unabhängigkeit verschiedener Programmteile (Modularität)
⢠Einheitlichkeit bei der LÜsung gleichartiger Probleme, z. B. durch Normierte Programmierung
⢠Robustheit durch ausfßhrliche Fehler- und Ausnahmebehandlung
⢠Umfang und Form der Dokumentation: Je Prozedur, je Zeile; Detaillierungsgrad; abgestimmt auf weitere Dokumente
Beispiel Quelltextformatierung
Wichtige Aspekte des Programmierstils sind die Anordnung von untergeordneten Programmelementen (EinrĂźckungsstil), die damit unmittelbar auch auf die Positionierung umschlieĂender Syntaxelemente wie {}, [], (), BEGIN oder END Einfluss haben, sowie der Einsatz von Leerzeichen und Leerzeilen und die Verschachtelungstiefe untergeordneter Programmelemente.
Auch die Namenskonventionen fĂźr Symbole spielen eine gewichtige Rolle im Zusammenhang mit der Bewertung des Programmierstils. Der Name eines Symbols sollte die Funktion oder Verwendungsweise hinreichend erklären oder zumindest andeuten. Da heute ausreichend Speicherplatz fĂźr den Code zur VerfĂźgung steht, ist die frĂźher Ăźbliche platzsparende Verwendung von KĂźrzeln wie zum Beispiel âdskmngrâ nicht mehr gerechtfertigt. Häufig wird fĂźr unterschiedliche Arten von Symbolen auch eine unterschiedliche Schreibweise verwendet, um so am Symbolnamen ablesen zu kĂśnnen, ob es sich um eine Variable, eine Funktion, eine Klasse oder eine Konstante etc. handelt. (Siehe auch Ungarische Notation). In diesem Zusammenhang sind auch die Länge und der Umfang von Symbolen sowie deren Deklarationsreihenfolge von Bedeutung.
Diese Aspekte der Quelltextformatierung beziehen sich in erster Linie auf die optische Lesbarkeit, dadurch jedoch direkt auch auf die Verständlichkeit eines Programmquelltexts.
Style Checker wie beispielsweise Checkstyle kÜnnen die meisten Kriterien fßr einen guten Programmierstil bezßglich dieser Elemente ßberprßfen. Beautifier sind in der Lage, durch Umformatierung des Quelltextes die Einhaltung eines guten Stils bezßglich dieser Elemente zu gewährleisten.
Umstrittene Elemente
Die folgenden Elemente von Programmierstilen sind umstritten. Es folgt zu jedem Element eine GegenĂźberstellung der Argumente der jeweiligen BefĂźrworter und Gegner. Falls mĂśglich und als allgemein akzeptiert betrachtbar, schlieĂt sich eine Empfehlung bezĂźglich des umstrittenen Elements an die ErĂśrterung an.
Kommentare
â
Hauptartikel
:
Kommentar (Programmierung)
Als Kommentare sollen nichttriviale oder nichtoffensichtliche Sachverhalte beschrieben, jedoch zum Programmcode in erkennbarer Form redundante Informationen vermieden werden. Die Menge (Frequenz) an Kommentaren soll sich auf zum Verständnis des Programms relevante Informationen beschränken.cite-ref-javaoracle-2-1[2] Dies kann auch von der Programmiersprache (z. B. der Verwendbarkeit âSprechender Namenâ) abhängig sein.
Zu viele Kommentare kÜnnen auf eher schlechte Codequalität hinweisen. Wo ein Kommentar erforderlich scheint, solle der Entwickler eine alternative Form der Implementierung prßfen.cite-ref-javaoracle-2-2[2]
Zu wenige Kommentare bedeuten im Wartungsfall (z. B. durch andere Entwickler) zu hÜherem Aufwand fßr die Einarbeitung ins oder das Verständnis fßr das Programm fßhren, im schlimmsten Fall zu Fehlimplementierungen fßhren.
FrĂźher galt die Abwesenheit von Kommentaren im Quellcode generell als Zeichen fĂźr einen schlechten Programmierstil. Man ging davon aus, dass Kommentare unerlässlich wären. Seit Refactoring und Clean Code wird das differenzierter gesehen. Robert Cecil Martin weist beispielsweise darauf hin, dass Kommentare niemals schlechten Code ausgleichen und Code stets selbsterklärend sein sollte. Er unterscheidet zwischen âgutenâ und âschlechtenâ Kommentaren.cite-ref-4[4]
Zeilenlänge
Oft wird eine Begrenzung der Zeilenlänge als guter Programmierstil angesehen. Fßr eine solche Begrenzung spricht (je nach festgelegter Maximal-Zeilenlänge), dass
⢠kßrzere Zeilen in der Regel leichter lesbar sind als längere (insbesondere leichter als mehrere lange, automatisch nur an Wortgrenzen umbrochene Zeilen untereinander), siehe den mehrspaltigen Satz von Zeitungen
⢠sich längere Anweisungen meist semantisch in einzelne Teile/Zeilen untergliedern lassen
⢠Vergleichswerkzeuge wie diff oft zeilenweise arbeiten und dabei Ănderungen leichter zu erkennen sind
⢠bei Beschränkung auf den sicheren druckbaren Bereich (80 Zeichen) semantisch motivierte Zeilenumbrßche und Einrßckungen auch im Ausdruck erhalten bleiben
Gegen eine Begrenzung der Zeilenlänge (also fßr ungekßrzte Zeilen) spricht, dass
⢠dies Handarbeit entweder beim Programmieren oder bei der Einrichtung der IDE erfordert
⢠insbesondere neuere APIs lange Symbolnamen verwenden, was die Entstehung sehr langer Zeilen begßnstigt
⢠bei einer Suche mit grep die Fundstelle â per Voreinstellung eine einzelne Zeile ohne Kontextzeilen â die vollständige Anweisung zeigen kann
Als Konsens kann gelten, dass auch lange Zeilen keinesfalls mehr als eine Anweisung enthalten sollen.
EinrĂźckungsstil
Der EinrĂźckungsstil ist wohl der umstrittenste Punkt eines Programmierstils.
Folgende Empfehlungen gelten jedoch als allgemein anerkannt:
⢠Festlegung innerhalb eines Projekts, Teil-Projekts, Teams oder Unternehmens. Beispiel: âFĂźr unsere Open-Source-Projekte in C und C++ verwenden wir die GNU-Coding-Standards, fĂźr Java grundsätzlich die Code Conventions von SUN und ansonsten die gemäà Allman.â
⢠Konsequente Umsetzung
⢠Keine Mischung unterschiedlicher Stile in einem Projekt
Ebenfalls viel diskutiert ist die Frage der Einrßckungstiefe fßr untergeordnete BlÜcke und ob man dabei Leerzeichen oder dem Tabulatorzeichen den Vorzug geben sollte. So schreibt die Code Convention fßr Java beispielsweise eine Einrßckungstiefe von vier Leerzeichen, die Code Convention fßr Linux hingegen eine Einrßckungstiefe von acht Zeichen vor. Der Vorteil der Einrßckung mit Leerzeichen besteht darin, dass die Einrßckung unabhängig von den Anzeigeoptionen des Anzeigeprogramms oder Editors stets erhalten bleibt.
Tabulatorzeichen zur Einrßckung bieten im Gegenzug den Vorteil, dass jeder Entwickler selbst durch die Konfiguration der Tabulatorschrittweite seines Texteditors die dargestellte Einrßckungstiefe bestimmen kann. Einigkeit besteht jedoch bezßglich der Auffassung, dass man beide Varianten nicht mischen sollte. Eine Mischung von Tabulator- und Leerzeichen bei der Einrßckung fßhrt zu uneinheitlichen Einrßckungstiefen fßr Elemente auf der gleichen Hierarchiestufe, was der Lesbarkeit eher abträglich ist.
Regelwerke
Siehe auch
Literatur
⢠Joseph Bergin: Coding at the Lowest Level. Coding Patterns for Java Beginners. Hrsg.: Pace University. (pace.edu [abgerufen am 19. Februar 2010]).
Weblinks
⢠Google Java Code Style (englisch)
⢠The GNU Coding Standards (englisch)
⢠Linux Kernel Coding Style (englisch)
⢠OpenBSD Kernel source file style guide (KNF) (englisch)
⢠ActionScript Coding Standards von MacroMedia (englisch)
⢠Object Pascal Style Guide (englisch)
⢠PHP PEAR Coding Standards (englisch)
Einzelnachweise
cite-note-11. â Andreas Schwill, Uni Paderborn: Programmierstile im Anfangsunterricht
cite-note-javaoracle-22. â Oracle Code Conventions for the Java TM Programming Languageoracle.com(1999)
cite-note-33. â Uwe Sauerland: Richtlinien zum Programmierstil
cite-note-44. â Robert Cecil Martin: Clean Code. A Handbook of Agile Software Craftsmanship. Prentice Hall, Upper Saddle River NJ u. a. 2008, ISBN 978-0-13-235088-4, 4. Comments, S. 53â74.